package com.xm.queue.task2;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;

/**
 * 优点：双锁分离（生产/消费独立锁），吞吐量更高。
 * 缺点：默认无界可能导致OOM；动态创建节点有GC开销。
 * 注意：显式设置容量（如new LinkedBlockingQueue<>(1000)）避免资源耗尽。
 */
public class TaskLinkedBlockingQueue extends BaseQueue {
    private final int CAPACITY = 1000;// 队列最大容量
    // 默认使用锁分离技术，putLock和takeLock分离
    private final BlockingQueue<ITask> taskQueue = new LinkedBlockingQueue<>(CAPACITY);

    @Override
    public void put(ITask task) throws InterruptedException {
        this.taskQueue.put(task);
    }

    @Override
    public ITask take() throws InterruptedException {
        return this.taskQueue.take();
    }

    @Override
    public ITask poll() throws InterruptedException {
        return this.taskQueue.poll(1, TimeUnit.SECONDS);
    }

    @Override
    public int size() {
        return this.taskQueue.size();
    }
}
